const { limitFlow:data } = require('../config/index.js')
//限制接口一定时间内的访问次数

let time = Date.now()
const limit = data.limit //最大请求数
const interval = data.interval //时间窗口 1分钟
let count = 0

async function limitFlow(ctx, next) {
    const nowTime = Date.now()
    if (nowTime < time + interval) { // 在时间窗口内
        if (count < limit) { // 判断当前时间窗口内是否超过最大请求控制数
            count++
            await next()
        } else {
            const surplusTime = time + interval - nowTime // 延迟响应时间
            ctx.append('Retry-After', surplusTime)
            ctx.throw(503)
        }
    } else {// 超时
        time = nowTime
        count = 1
        await next()
    }
}

module.exports = limitFlow